package com.supermarket.controller;

import cn.hutool.core.util.StrUtil;
import com.supermarket.entity.User;
import com.supermarket.service.UserService;
import com.supermarket.common.ResponseResult;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;

    /**
     * 获取所有用户信息
     *
     * @return 包含所有用户信息的响应结果
     */
    @GetMapping("/alluser")
    public ResponseResult<List<User>> getAllUser() {
        return ResponseResult.success(userService.getAllUser());
    }

    /**
     * 分页查询所有用户
     * http://127.0.0.1:8080/user/alluser/page?pageNum=&pageSize=
     *
     * @param pageNum  当前页码
     * @param pageSize 每页显示条数
     * @param username 用户名（可选）
     * @param nickname 昵称（可选）
     * @param email    邮箱（可选）
     * @return 包含分页用户信息的响应结果
     */
    @GetMapping("/alluser/page")
    public ResponseResult<Map<String, Object>> getAllUsersWithPagination(
            @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
            @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
            @RequestParam(value = "username", required = false) String username,
            @RequestParam(value = "nickname", required = false) String nickname,
            @RequestParam(value = "email", required = false) String email) {
        Map<String, Object> result = userService.getAllUsersWithPagination(pageNum, pageSize, username, nickname, email);
        return ResponseResult.success(result);
    }

    /**
     * 根据用户ID查询用户信息
     *
     * @param id 用户ID
     * @return 包含指定用户信息的响应结果
     */
    @GetMapping("/selectByID")
    public ResponseResult<User> getUserById(@RequestParam(value = "id") Integer id) {
        return ResponseResult.success(userService.getUserById(id));
    }

    /**
     * 根据用户属性查询用户信息
     *
     * @param user 用户对象，包含查询条件
     * @return 包含符合条件的用户列表的响应结果
     */
    @GetMapping("/selectByUser")
    public ResponseResult<List<User>> getUserByAttributes(@ModelAttribute User user) {
        return ResponseResult.success(userService.selectByUser(user));
    }

    /**
     * 添加新用户
     *
     * @param user 用户对象
     * @return 包含操作结果的响应结果
     */
    @PostMapping("/add")
    public ResponseResult<String> addUser(@RequestBody User user) {
        if(StrUtil.isBlank(user.getUsername()) || StrUtil.isBlank(user.getPassword()) || StrUtil.isBlank(user.getNickname())){
            return ResponseResult.error(400, "账号、密码和昵称不能为空");
        }
        int result = userService.addUser(user);
        if (result > 0) {
            return ResponseResult.success("用户添加成功");
        } else {
            return ResponseResult.error(400, "用户添加失败");
        }
    }

    /**
     * 更新用户信息
     *
     * @param user 用户对象
     * @return 包含操作结果的响应结果
     */
    @PutMapping("/update")
    public ResponseResult<String> updateUser(@RequestBody User user) {
        if(StrUtil.isBlank(user.getUsername()) || StrUtil.isBlank(user.getNickname())){
            return ResponseResult.error(400, "账号或昵称不能为空");
        }
        
        // 添加调试日志
        System.out.println("开始更新用户信息: " + user.getUsername());
        System.out.println("传入version值: " + user.getVersion());
        
        try {
            int result = userService.updateUser(user);
            
            System.out.println("更新用户信息结果: " + result);
            
            if (result > 0) {
                return ResponseResult.success("用户更新成功");
            } else {
                return ResponseResult.error(400, "用户更新失败");
            }
        } catch (RuntimeException e) {
            System.out.println("更新用户信息异常: " + e.getMessage());
            e.printStackTrace();
            return ResponseResult.error(400, e.getMessage());
        }
    }

    /**
     * 更新用户头像
     *
     * @param user 包含用户名和头像URL的用户对象
     * @return 包含操作结果的响应结果
     */
    @PutMapping("/updateAvatar")
    public ResponseResult<String> updateUserAvatar(@RequestBody User user) {
        if (StrUtil.isBlank(user.getUsername()) || StrUtil.isBlank(user.getAvatar())) {
            return ResponseResult.error(400, "用户名或头像URL不能为空");
        }
        
        try {
            // 从数据库获取完整的用户信息
            User existingUser = userService.getUserByUsername(user.getUsername());
            if (existingUser == null) {
                return ResponseResult.error(404, "用户不存在");
            }
            
            // 只更新头像字段
            existingUser.setAvatar(user.getAvatar());
            
            int result = userService.updateUser(existingUser);
            if (result > 0) {
                return ResponseResult.success("头像更新成功");
            } else {
                return ResponseResult.error(400, "头像更新失败");
            }
        } catch (RuntimeException e) {
            return ResponseResult.error(400, e.getMessage());
        }
    }

    /**
     * 删除用户
     *
     * @param username 用户名
     * @return 包含操作结果的响应结果
     */
    @DeleteMapping("/delete/{username}")
    public ResponseResult<String> deleteUser(@PathVariable String username) {
        int result = userService.deleteUser(username);
        if (result > 0) {
            return ResponseResult.success("用户删除成功");
        } else {
            return ResponseResult.error(400, "用户删除失败");
        }
    }
}